home *** CD-ROM | disk | FTP | other *** search
/ PC World 2007 January / PCWorld_2007-01_cd.bin / v cisle / autoit / autoit-v3.2.0.1-setup.exe / Include / GuiList.au3 < prev    next >
Text File  |  2006-07-22  |  49KB  |  1,025 lines

  1. ; Include Version:1.66 (17 July 2006)
  2. #include-once
  3. #include <ListBoxConstants.au3>
  4. ; ------------------------------------------------------------------------------
  5. ;
  6. ; AutoIt Version: 3.1.1++
  7. ; Language:       English
  8. ; Description:    Functions that assist with Listbox.
  9. ;
  10. ; ------------------------------------------------------------------------------
  11.  
  12. ; function list
  13. ;===============================================================================
  14. ; _GUICtrlListAddDir
  15. ; _GUICtrlListAddItem
  16. ; _GUICtrlListClear
  17. ; _GUICtrlListCount
  18. ; _GUICtrlListDeleteItem
  19. ; _GUICtrlListFindString
  20. ; _GUICtrlListGetAnchorIndex
  21. ; _GUICtrlListGetCaretIndex
  22. ; _GUICtrlListGetHorizontalExtent
  23. ; _GUICtrlListGetInfo
  24. ; _GUICtrlListGetLocale
  25. ; _GUICtrlListGetSelCount
  26. ; _GUICtrlListGetSelItems
  27. ; _GUICtrlListGetSelItemsText
  28. ; _GUICtrlListGetSelState
  29. ; _GUICtrlListGetText
  30. ; _GUICtrlListGetTextLen
  31. ; _GUICtrlListGetTopIndex
  32. ; _GUICtrlListInsertItem
  33. ; _GUICtrlListReplaceString
  34. ; _GUICtrlListSelectedIndex
  35. ; _GUICtrlListSelectString
  36. ; _GUICtrlListSelItemRange
  37. ; _GUICtrlListSelItemRangeEx
  38. ; _GUICtrlListSetAnchorIndex
  39. ; _GUICtrlListSetCaretIndex
  40. ; _GUICtrlListSetHorizontalExtent
  41. ; _GUICtrlListSetLocale
  42. ; _GUICtrlListSetSel
  43. ; _GUICtrlListSetTopIndex
  44. ; _GUICtrlListSort
  45. ; _GUICtrlListSwapString
  46. ;
  47. ; ************** TODO ******************
  48. ; _GUICtrlListAddFile
  49. ;===============================================================================
  50.  
  51. ;===============================================================================
  52. ;
  53. ; Description:            _GUICtrlListAddDir
  54. ; Parameter(s):        $h_listbox - controlID
  55. ;                            $s_Attributes - Comma-delimited string
  56. ;                            $s_file - Optional for "Drives" only: what to get i.e *.*
  57. ; Requirement:            None
  58. ; Return Value(s):    zero-based index of the last name added to the list
  59. ;                            If an error occurs, the return value is $LB_ERR.
  60. ;                            If there is insufficient space to store the new strings, the return value is $LB_ERRSPACE
  61. ; User CallTip:        _GUICtrlListAddDir($h_listbox, $s_Attributes[, $s_file=""]) Add names to the list displayed by the list box (required: <GuiList.au3>)
  62. ; Author(s):            Gary Frost (custompcs at charter dot net)
  63. ;                    CyberSlug
  64. ; Note(s):                $s_Attributes is an comma-delimited string
  65. ;                             valid values are any of the following:
  66. ;                                 A,D,H,RO,RW,S,E,Drives,NB
  67. ;                            A = ARCHIVE
  68. ;                                Includes archived files.
  69. ;                            D = DIRECTORY
  70. ;                                Includes subdirectories. Subdirectory names are enclosed in square brackets ([ ]).
  71. ;                            H = HIDDEN
  72. ;                                Includes hidden files.
  73. ;                            RO = READONLY
  74. ;                                Includes read-only files.
  75. ;                            RW = READWRITE
  76. ;                                Includes read-write files with no additional attributes. This is the default setting.
  77. ;                            S = SYSTEM
  78. ;                                Includes system files.
  79. ;                            E = EXCLUSIVE
  80. ;                                Includes only files with the specified attributes. By default, read-write files are listed even if READWRITE is not specified.
  81. ;                            DRIVES
  82. ;                                All mapped drives are added to the list. Drives are listed in the form [-x-], where x is the drive letter.
  83. ;                            NB = No Brackets
  84. ;                               Drives are liste in the form x:, where x is the drive letter (used with Drives attribute)
  85. ;
  86. ;===============================================================================
  87. Func _GUICtrlListAddDir($h_listbox, $s_Attributes, $s_file = "")
  88.    Local $i, $v_Attributes = "", $i_drives = 0, $no_brackets = 0, $v_ret
  89.    Local $a_Attributes = StringSplit($s_Attributes, ",")
  90.    For $i = 1 To $a_Attributes[0]
  91.       Select
  92.          Case StringUpper($a_Attributes[$i]) = "A"
  93.             If (StringLen($v_Attributes) > 0) Then
  94.                $v_Attributes = $v_Attributes + $DDL_ARCHIVE
  95.             Else
  96.                $v_Attributes = $DDL_ARCHIVE
  97.             EndIf
  98.          Case StringUpper($a_Attributes[$i]) = "D"
  99.             If (StringLen($v_Attributes) > 0) Then
  100.                $v_Attributes = $v_Attributes + $DDL_DIRECTORY
  101.             Else
  102.                $v_Attributes = $DDL_DIRECTORY
  103.             EndIf
  104.          Case StringUpper($a_Attributes[$i]) = "H"
  105.             If (StringLen($v_Attributes) > 0) Then
  106.                $v_Attributes = $v_Attributes + $DDL_HIDDEN
  107.             Else
  108.                $v_Attributes = $DDL_HIDDEN
  109.             EndIf
  110.          Case StringUpper($a_Attributes[$i]) = "RO"
  111.             If (StringLen($v_Attributes) > 0) Then
  112.                $v_Attributes = $v_Attributes + $DDL_READONLY
  113.             Else
  114.                $v_Attributes = $DDL_READONLY
  115.             EndIf
  116.          Case StringUpper($a_Attributes[$i]) = "RW"
  117.             If (StringLen($v_Attributes) > 0) Then
  118.                $v_Attributes = $v_Attributes + $DDL_READWRITE
  119.             Else
  120.                $v_Attributes = $DDL_READWRITE
  121.             EndIf
  122.          Case StringUpper($a_Attributes[$i]) = "S"
  123.             If (StringLen($v_Attributes) > 0) Then
  124.                $v_Attributes = $v_Attributes + $DDL_SYSTEM
  125.             Else
  126.                $v_Attributes = $DDL_SYSTEM
  127.             EndIf
  128.          Case StringUpper($a_Attributes[$i]) = "DRIVES"
  129.             $i_drives = 1
  130.             $s_file = ""
  131.             If (StringLen($v_Attributes) > 0) Then
  132.                $v_Attributes = $v_Attributes + $DDL_DRIVES
  133.             Else
  134.                $v_Attributes = $DDL_DRIVES
  135.             EndIf
  136.          Case StringUpper($a_Attributes[$i]) = "E"
  137.             If (StringLen($v_Attributes) > 0) Then
  138.                $v_Attributes = $v_Attributes + $DDL_EXCLUSIVE
  139.             Else
  140.                $v_Attributes = $DDL_EXCLUSIVE
  141.             EndIf
  142.             Case StringUpper($a_Attributes[$i]) = "NB"
  143.                 If (StringLen($v_Attributes) > 0) And StringInStr($s_Attributes,"DRIVES") Then
  144.                     $no_brackets = 1
  145.                 Else
  146.                     $no_brackets = 0
  147.                 EndIf
  148.          Case Else
  149.             ; invalid attribute
  150.             Return $LB_ERRATTRIBUTE
  151.       EndSelect
  152.    Next
  153.    If (Not $i_drives And StringLen($s_file) == 0) Then
  154.       Return $LB_ERRREQUIRED
  155.    EndIf
  156.     If $i_drives And $no_brackets Then
  157.         Local $s_text
  158.         Local $gui_no_brackets = GUICreate("no brackets")
  159.         Local $list_no_brackets = GUICtrlCreateList("", 240, 40, 120, 120)
  160.         $v_ret = GUICtrlSendMsg($list_no_brackets, $LB_DIR, $v_Attributes, $s_file)
  161.         For $i = 0 To _GUICtrlListCount($list_no_brackets) - 1
  162.             $s_text = _GUICtrlListGetText($list_no_brackets,$i)
  163.             $s_text = StringReplace(StringReplace(StringReplace($s_text,"[",""),"]",":"),"-","")
  164.             _GUICtrlListInsertItem($h_listbox,$s_text)
  165.         Next
  166.         GUIDelete($gui_no_brackets)
  167.         Return $v_ret
  168.     Else
  169.    If IsHWnd($h_listbox) Then
  170.             $v_ret = DllCall("user32.dll", "int", "SendMessage", "hwnd", $h_listbox, "int", $LB_DIR, "int", $v_Attributes, "str", $s_file)
  171.             Return $v_ret[0]
  172.    Else
  173.       Return GUICtrlSendMsg($h_listbox, $LB_DIR, $v_Attributes, $s_file)
  174.    EndIf
  175.     EndIf
  176. EndFunc   ;==>_GUICtrlListAddDir
  177.  
  178. ;===============================================================================
  179. ;
  180. ; Description:            _GUICtrlListAddItem
  181. ; Parameter(s):        $h_listbox - controlID
  182. ;                            $s_text - string to add
  183. ; Requirement:            None
  184. ; Return Value(s):    The return value is the zero-based index of the string in
  185. ;                            the list box. If an error occurs, the return value is $LB_ERR.
  186. ;                            If there is insufficient space to store the new string,
  187. ;                            the return value is $LB_ERRSPACE.
  188. ; User CallTip:        _GUICtrlListAddItem($h_listbox, $s_text) Add an item to the List (required: <GuiList.au3>)
  189. ; Author(s):            Gary Frost (custompcs at charter dot net)
  190. ; Note(s):                If the list box does not have the LBS_SORT style, the string is added to the
  191. ;                             end of the list. Otherwise, the string is inserted into the list and the list
  192. ;                             is sorted.
  193. ;
  194. ;===============================================================================
  195. Func _GUICtrlListAddItem($h_listbox, $s_text)
  196.    If IsHWnd($h_listbox) Then
  197.       Local $a_ret = DllCall("user32.dll", "int", "SendMessage", "hwnd", $h_listbox, "int", $LB_ADDSTRING, "int", 0, "str", $s_text)
  198.       Return $a_ret[0]
  199.    Else
  200.       Return GUICtrlSendMsg($h_listbox, $LB_ADDSTRING, 0, $s_text)
  201.    EndIf
  202. EndFunc   ;==>_GUICtrlListAddItem
  203.  
  204. ;===============================================================================
  205. ;
  206. ; Description:            _GUICtrlListClear
  207. ; Parameter(s):        $h_listbox - controlID
  208. ; Requirement:            None
  209. ; Return Value(s):    None
  210. ; User CallTip:        _GUICtrlListClear($h_listbox) remove all items from the list box (required: <GuiList.au3>)
  211. ; Author(s):            Gary Frost (custompcs at charter dot net)
  212. ; Note(s):                None
  213. ;
  214. ;===============================================================================
  215. Func _GUICtrlListClear($h_listbox)
  216.    If IsHWnd($h_listbox) Then
  217.       DllCall("user32.dll", "none", "SendMessage", "hwnd", $h_listbox, "int", $LB_RESETCONTENT, "int", 0, "int", 0)
  218.    Else
  219.       GUICtrlSendMsg($h_listbox, $LB_RESETCONTENT, 0, 0)
  220.    EndIf
  221. EndFunc   ;==>_GUICtrlListClear
  222.  
  223. ;===============================================================================
  224. ;
  225. ; Description:            _GUICtrlListCount
  226. ; Parameter(s):        $h_listbox - controlID
  227. ; Requirement:            None
  228. ; Return Value(s):    The return value is the number of items in the list box
  229. ;                            or $LB_ERR if an error occurs
  230. ; User CallTip:        _GUICtrlListCount($h_listbox) return the number of items in the list box (required: <GuiList.au3>)
  231. ; Author(s):            Gary Frost (custompcs at charter dot net)
  232. ; Note(s):                None
  233. ;
  234. ;===============================================================================
  235. Func _GUICtrlListCount($h_listbox)
  236.    If IsHWnd($h_listbox) Then
  237.       Local $a_ret = DllCall("user32.dll", "int", "SendMessage", "hwnd", $h_listbox, "int", $LB_GETCOUNT, "int", 0, "int", 0)
  238.       Return $a_ret[0]
  239.    Else
  240.       Return GUICtrlSendMsg($h_listbox, $LB_GETCOUNT, 0, 0)
  241.    EndIf
  242. EndFunc   ;==>_GUICtrlListCount
  243.  
  244. ;===============================================================================
  245. ;
  246. ; Description:            _GUICtrlListDeleteItem
  247. ; Parameter(s):        $h_listbox - controlID
  248. ;                            $i_index - index of item to delete
  249. ; Requirement:            None
  250. ; Return Value(s):    The return value is a count of the strings remaining in the list.
  251. ;                            The return value is $LB_ERR if the $i_index parameter specifies an
  252. ;                            index greater than the number of items in the list.
  253. ; User CallTip:        _GUICtrlListDeleteItem($h_listbox, $i_index) Delete an Item from the List (required: <GuiList.au3>)
  254. ; Author(s):            Gary Frost (custompcs at charter dot net)
  255. ; Note(s):                None
  256. ;
  257. ;===============================================================================
  258. Func _GUICtrlListDeleteItem($h_listbox, $i_index)
  259.    If IsHWnd($h_listbox) Then
  260.       Local $a_ret = DllCall("user32.dll", "int", "SendMessage", "hwnd", $h_listbox, "int", $LB_DELETESTRING, "int", $i_index, "int", 0)
  261.       Return $a_ret[0]
  262.    Else
  263.       Return GUICtrlSendMsg($h_listbox, $LB_DELETESTRING, $i_index, 0)
  264.    EndIf
  265. EndFunc   ;==>_GUICtrlListDeleteItem
  266.  
  267. ;===============================================================================
  268. ;
  269. ; Description:            _GUICtrlListFindString
  270. ; Parameter(s):        $h_listbox - controlID
  271. ;                            $s_search - string to search for
  272. ;                            $i_exact - exact match or not
  273. ; Requirement:            None
  274. ; Return Value(s):    The return value is the index of the matching item,
  275. ;                            or $LB_ERR if the search was unsuccessful.
  276. ; User CallTip:        _GUICtrlListFind($h_listbox, $s_search[, $i_exact=0]) return the index of matching item (required: <GuiList.au3>)
  277. ; Author(s):            Gary Frost (custompcs at charter dot net)
  278. ; Note(s):                find the first string in a list box that begins with the specified string.
  279. ;                            if exact is specified find the first list box string that exactly matches
  280. ;                    the specified string, except that the search is not case sensitive
  281. ;===============================================================================
  282. Func _GUICtrlListFindString($h_listbox, $s_search, $i_exact = 0)
  283.    If IsHWnd($h_listbox) Then
  284.       Local $a_ret
  285.       If ($i_exact) Then
  286.          $a_ret = DllCall("user32.dll", "int", "SendMessage", "hwnd", $h_listbox, "int", $LB_FINDSTRINGEXACT, "int", -1, "str", $s_search)
  287.       Else
  288.          $a_ret = DllCall("user32.dll", "int", "SendMessage", "hwnd", $h_listbox, "int", $LB_FINDSTRING, "int", -1, "str", $s_search)
  289.       EndIf
  290.       Return $a_ret[0]
  291.    Else
  292.       If ($i_exact) Then
  293.          Return GUICtrlSendMsg($h_listbox, $LB_FINDSTRINGEXACT, -1, $s_search)
  294.       Else
  295.          Return GUICtrlSendMsg($h_listbox, $LB_FINDSTRING, -1, $s_search)
  296.       EndIf
  297.    EndIf
  298. EndFunc   ;==>_GUICtrlListFindString
  299.  
  300. ;===============================================================================
  301. ;
  302. ; Description:            _GUICtrlListGetAnchorIndex
  303. ; Parameter(s):        $h_listbox - controlID
  304. ; Requirement:            multi-select style
  305. ; Return Value(s):    The return value is the index of the anchor item.
  306. ;                            If an error occurs, the return value is $LB_ERR
  307. ; User CallTip:        _GUICtrlListGetAnchorIndex($h_listbox) Get the Anchor Idex (required: <GuiList.au3>)
  308. ; Author(s):            CyberSlug
  309. ; Note(s):                DOES NOT WORK WITH SINGLE-SELECTION LIST BOXES
  310. ;                         This might not always be the first selected item--especially
  311. ;                          if you select every other item via Ctrl+Click...
  312. ;
  313. ;===============================================================================
  314. Func _GUICtrlListGetAnchorIndex($h_listbox)
  315.    If IsHWnd($h_listbox) Then
  316.       Local $a_ret = DllCall("user32.dll", "int", "SendMessage", "hwnd", $h_listbox, "int", $LB_GETANCHORINDEX, "int", 0, "int", 0)
  317.       Return $a_ret[0]
  318.    Else
  319.       Return GUICtrlSendMsg($h_listbox, $LB_GETANCHORINDEX, 0, 0)
  320.    EndIf
  321. EndFunc   ;==>_GUICtrlListGetAnchorIndex
  322.  
  323. ;===============================================================================
  324. ;
  325. ; Description:            _GUICtrlListGetCaretIndex
  326. ; Parameter(s):        $h_listbox - controlID
  327. ; Requirement:            multi-select style
  328. ; Return Value(s):    The return value is the zero-based index of the selected list box item.
  329. ;                            If nothing is selected $LB_ERR can be returned.
  330. ; User CallTip:        _GUICtrlListGetCaretIndex($h_listbox) Return index of item that has the focus rectangle (required: <GuiList.au3>)
  331. ; Author(s):            CyberSlug
  332. ; Note(s):                To determine the index of the item that has the focus rectangle in a
  333. ;                            multiple-selection list box. The item may or may not be selected
  334. ;
  335. ;===============================================================================
  336. Func _GUICtrlListGetCaretIndex($h_listbox)
  337.    If IsHWnd($h_listbox) Then
  338.       Local $a_ret = DllCall("user32.dll", "int", "SendMessage", "hwnd", $h_listbox, "int", $LB_GETCARETINDEX, "int", 0, "int", 0)
  339.       Return $a_ret[0]
  340.    Else
  341.       Return GUICtrlSendMsg($h_listbox, $LB_GETCARETINDEX, 0, 0)
  342.    EndIf
  343. EndFunc   ;==>_GUICtrlListGetCaretIndex
  344.  
  345. ;===============================================================================
  346. ;
  347. ; Description:            _GUICtrlListGetHorizontalExtent
  348. ; Parameter(s):        $h_listbox - controlID
  349. ; Requirement:            None.
  350. ; Return Value(s):    The return value is the scrollable width, in pixels, of the list box.
  351. ; User CallTip:        _GUICtrlListGetHorizontalExtent($h_listbox) Retrieve from a list box the the scrollable width (required: <GuiList.au3>)
  352. ; Author(s):            Gary Frost (custompcs at charter dot net)
  353. ; Note(s):                To respond to the $LB_GETHORIZONTALEXTENT message,
  354. ;                            the list box must have been defined with the $WS_HSCROLL style.
  355. ;
  356. ;===============================================================================
  357. Func _GUICtrlListGetHorizontalExtent($h_listbox)
  358.    If IsHWnd($h_listbox) Then
  359.       Local $a_ret = DllCall("user32.dll", "int", "SendMessage", "hwnd", $h_listbox, "int", $LB_GETHORIZONTALEXTENT, "int", 0, "int", 0)
  360.       Return $a_ret[0]
  361.    Else
  362.       Return GUICtrlSendMsg($h_listbox, $LB_GETHORIZONTALEXTENT, 0, 0)
  363.    EndIf
  364. EndFunc   ;==>_GUICtrlListGetHorizontalExtent
  365.  
  366. ;===============================================================================
  367. ;
  368. ; Description:            _GUICtrlListGetInfo
  369. ; Parameter(s):        $h_listbox - controlID
  370. ; Requirement:            None.
  371. ; Return Value(s):    The return value is the number of items per column.
  372. ; User CallTip:        _GUICtrlListGetInfo($h_listbox) Retrieve the number of items per column in a specified list box. (required: <GuiList.au3>)
  373. ; Author(s):            Gary Frost (custompcs at charter dot net)
  374. ; Note(s):
  375. ;
  376. ;===============================================================================
  377. Func _GUICtrlListGetInfo($h_listbox)
  378.    If IsHWnd($h_listbox) Then
  379.       Local $a_ret = DllCall("user32.dll", "int", "SendMessage", "hwnd", $h_listbox, "int", $LB_GETLISTBOXINFO, "int", 0, "int", 0)
  380.       Return $a_ret[0]
  381.    Else
  382.       Return GUICtrlSendMsg($h_listbox, $LB_GETLISTBOXINFO, 0, 0)
  383.    EndIf
  384. EndFunc   ;==>_GUICtrlListGetInfo
  385.  
  386. ;===============================================================================
  387. ;
  388. ; Description:            _GUICtrlListGetItemRect
  389. ; Parameter(s):        $h_listbox - controlID
  390. ;                            $i_index - Specifies the zero-based index of the item.
  391. ; Requirement:            Array containing the RECT, first element ($array[0]) contains the number of elements
  392. ;                            If an error occurs, the return value is $LB_ERR.
  393. ; Return Value(s):    The return value is the number of items per column.
  394. ; User CallTip:        _GUICtrlListGetItemRect($h_listbox, $i_index) Retrieve the dimensions of the rectangle that bounds a list box item. (required: <GuiList.au3>)
  395. ; Author(s):            Gary Frost (custompcs at charter dot net)
  396. ; Note(s):                $array[1] - left
  397. ;                            $array[2] - top
  398. ;                            $array[3] - right
  399. ;                            $array[4] - bottom
  400. ;
  401. ;===============================================================================
  402. Func _GUICtrlListGetItemRect($h_listbox, $i_index)
  403.    #cs
  404.       typedef struct _RECT {
  405.       LONG left;
  406.       LONG top;
  407.       LONG right;
  408.       LONG bottom;
  409.       } RECT, *PRECT;
  410.    #ce
  411.    Local $RECT = "int;int;int;int"
  412.    Local $left = 1, $top = 2, $right = 3, $bottom = 4
  413.    Local $p = DllStructCreate($RECT)
  414.    If @error Then Return SetError($LB_ERR, $LB_ERR, $LB_ERR)
  415.    If IsHWnd($h_listbox) Then
  416.       Local $a_ret = DllCall("user32.dll", "int", "SendMessage", "hwnd", $h_listbox, "int", $LB_GETITEMRECT, "int", $i_index, "ptr", DllStructGetPtr($p))
  417.       If ($a_ret[0] == $LB_ERR) Then Return SetError($LB_ERR, $LB_ERR, $LB_ERR)
  418.    Else
  419.       Local $i_ret = GUICtrlSendMsg($h_listbox, $LB_GETITEMRECT, $i_index, DllStructGetPtr($p))
  420.       If ($i_ret == $LB_ERR) Then Return SetError($LB_ERR, $LB_ERR, $LB_ERR)
  421.    EndIf
  422.    Local $array = StringSplit(DllStructGetData($p, $left) & "," & DllStructGetData($p, $top) & "," & DllStructGetData($p, $right) & "," & DllStructGetData($p, $bottom), ",")
  423.    Return $array
  424. EndFunc   ;==>_GUICtrlListGetItemRect
  425.  
  426. ;===============================================================================
  427. ;
  428. ; Description:            _GUICtrlListGetLocale
  429. ; Parameter(s):        $h_listbox - controlID
  430. ; Requirement:            None
  431. ; Return Value(s):    Returns the current Local of the listbox
  432. ;                             same as @OSLang unless changed
  433. ; User CallTip:        _GUICtrlListGetLocale($h_listbox) current Local of the listbox (required: <GuiList.au3>)
  434. ; Author(s):            CyberSlug
  435. ; Note(s):                "0409" for U.S. English
  436. ;
  437. ;===============================================================================
  438. Func _GUICtrlListGetLocale($h_listbox)
  439.    If IsHWnd($h_listbox) Then
  440.       Local $a_ret = DllCall("user32.dll", "int", "SendMessage", "hwnd", $h_listbox, "int", $LB_GETLOCALE, "int", 0, "int", 0)
  441.       Return Hex($a_ret[0], 4)
  442.    Else
  443.       Return Hex( GUICtrlSendMsg($h_listbox, $LB_GETLOCALE, 0, 0), 4)
  444.    EndIf
  445. EndFunc   ;==>_GUICtrlListGetLocale
  446.  
  447. ;===============================================================================
  448. ;
  449. ; Description:            _GUICtrlListGetSelCount
  450. ; Parameter(s):        $h_listbox - controlID
  451. ; Requirement:            multiple-selection list box
  452. ; Return Value(s):    The return value is the count of selected items in the list box.
  453. ;                            If the list box is a single-selection list box, the return value is $LB_ERR.
  454. ; User CallTip:        _GUICtrlListGetSelCount($h_listbox) Get the number of items selected (required: <GuiList.au3>)
  455. ; Author(s):            CyberSlug
  456. ; Note(s):                Retrieve the total number of selected items in a multiple-selection list box.
  457. ;                             Number of selected items (for a control with multi-select style)
  458. ;
  459. ;===============================================================================
  460. Func _GUICtrlListGetSelCount($h_listbox)
  461.    If IsHWnd($h_listbox) Then
  462.       Local $a_ret = DllCall("user32.dll", "int", "SendMessage", "hwnd", $h_listbox, "int", $LB_GETSELCOUNT, "int", 0, "int", 0)
  463.       Return $a_ret[0]
  464.    Else
  465.       Return GUICtrlSendMsg($h_listbox, $LB_GETSELCOUNT, 0, 0)
  466.    EndIf
  467. EndFunc   ;==>_GUICtrlListGetSelCount
  468.  
  469. ;===============================================================================
  470. ;
  471. ; Description:            _GUICtrlListGetSelItems
  472. ; Parameter(s):        $h_listbox - controlID
  473. ; Requirement:            multi-select style
  474. ; Return Value(s):    Array of selected items indices, first element ($array[0]) contains the number indices returned
  475. ;                            If the list box is a single-selection list box, the return value is $LB_ERR.
  476. ;                            If no items are selected, the return value is $LB_ERR.
  477. ; User CallTip:        _GUICtrlListGetSelItems($h_listbox) Get item indices of selected items (required: <GuiList.au3>)
  478. ; Author(s):            Gary Frost (custompcs at charter dot net)
  479. ; Note(s):
  480. ;
  481. ;===============================================================================
  482. Func _GUICtrlListGetSelItems($h_listbox)
  483.    Local $num = _GUICtrlListGetSelCount($h_listbox)
  484.    Local $i, $struct
  485.    For $i = 1 To $num
  486.       $struct &= "int;"
  487.    Next
  488.    $struct = StringTrimRight($struct, 1)
  489.    Local $p = DllStructCreate($struct)
  490.    If @error Then Return SetError($LB_ERR, $LB_ERR, $LB_ERR)
  491.    If IsHWnd($h_listbox) Then
  492.       Local $a_ret = DllCall("user32.dll", "int", "SendMessage", "hwnd", $h_listbox, "int", $LB_GETSELITEMS, "int", $num, "ptr", DllStructGetPtr($p))
  493.       If ($a_ret[0] == $LB_ERR Or $a_ret[0] == 0) Then Return SetError($LB_ERR, $LB_ERR, $LB_ERR)
  494.    Else
  495.       Local $i_ret = GUICtrlSendMsg($h_listbox, $LB_GETSELITEMS, $num, DllStructGetPtr($p))
  496.       If ($i_ret == $LB_ERR Or $i_ret == 0) Then Return SetError($LB_ERR, $LB_ERR, $LB_ERR)
  497.    EndIf
  498.    Local $array
  499.    For $i = 1 To $num
  500.       $array &= DllStructGetData($p, $i) & ","
  501.    Next
  502.    $array = StringTrimRight($array, 1)
  503.    Local $a_items = StringSplit($array, ",")
  504.    For $i = 1 To $a_items[0]
  505.       $a_items[$i] = Int($a_items[$i])
  506.    Next
  507.    Return $a_items
  508. EndFunc   ;==>_GUICtrlListGetSelItems
  509.  
  510. ;===============================================================================
  511. ;
  512. ; Description:            _GUICtrlListGetSelItemsText
  513. ; Parameter(s):        $h_listbox - controlID
  514. ; Requirement:            multi-select style
  515. ; Return Value(s):    array of selected items text, first element ($array[0]) contains the number items returned
  516. ;                            If the list box is a single-selection list box, the return value is $LB_ERR.
  517. ;                            If no items are selected, the return value is $LB_ERR.
  518. ; User CallTip:        _GUICtrlListGetSelItemsText($h_listbox) Get the text of selected items (required: <GuiList.au3>)
  519. ; Author(s):            Gary Frost (custompcs at charter dot net)
  520. ;                    CyberSlug
  521. ; Note(s):
  522. ;
  523. ;===============================================================================
  524. Func _GUICtrlListGetSelItemsText($h_listbox)
  525.    Local $i, $i_ret, $a_text
  526.    For $i = 0 To _GUICtrlListCount($h_listbox) - 1
  527.       $i_ret = _GUICtrlListGetSelState($h_listbox, $i)
  528.       If ($i_ret > 0) Then
  529.          If IsArray($a_text) Then
  530.             ReDim $a_text[UBound($a_text) + 1]
  531.          Else
  532.             Local $a_text[2]
  533.          EndIf
  534.          $a_text[0] += 1
  535.          $a_text[UBound($a_text) - 1] = _GUICtrlListGetText($h_listbox, $i)
  536.       ElseIf ($i_ret == $LB_ERR) Then
  537.           Return SetError($LB_ERR, $LB_ERR, $LB_ERR)
  538.       EndIf
  539.    Next
  540.    Return $a_text
  541. EndFunc   ;==>_GUICtrlListGetSelItemsText
  542.  
  543. ;===============================================================================
  544. ;
  545. ; Description:            _GUICtrlListGetSelState
  546. ; Parameter(s):        $h_listbox - controlID
  547. ;                            $i_index - Specifies the zero-based index of the item
  548. ; Requirement:            None
  549. ; Return Value(s):    If an item is selected, the return value is greater than zero
  550. ;                             otherwise, it is zero. If an error occurs, the return value is $LB_ERR.
  551. ; User CallTip:        _GUICtrlListGetSelState($h_listbox, $i_index) Get the selection state of item (required: <GuiList.au3>)
  552. ; Author(s):            CyberSlug
  553. ; Note(s):                None
  554. ;
  555. ;===============================================================================
  556. Func _GUICtrlListGetSelState($h_listbox, $i_index)
  557.    If IsHWnd($h_listbox) Then
  558.       Local $a_ret = DllCall("user32.dll", "int", "SendMessage", "hwnd", $h_listbox, "int", $LB_GETSEL, "int", $i_index, "int", 0)
  559.       Return $a_ret[0]
  560.    Else
  561.       Return GUICtrlSendMsg($h_listbox, $LB_GETSEL, $i_index, 0)
  562.    EndIf
  563. EndFunc   ;==>_GUICtrlListGetSelState
  564.  
  565. ;===============================================================================
  566. ;
  567. ; Description:            _GUICtrlListGetText
  568. ; Parameter(s):        $h_listbox - controlID
  569. ;                            $i_index - Specifies the zero-based index of the string to retrieve
  570. ; Requirement:            None
  571. ; Return Value(s):    The return value is the item string.
  572. ;                            If $i_index does not specify a valid index, the return value is $LB_ERR.
  573. ; User CallTip:        _GUICtrlListGetText($h_listbox, $i_index) Returns the item (string) at the specified index (required: <GuiList.au3>)
  574. ; Author(s):            CyberSlug
  575. ; Note(s):                None
  576. ;
  577. ;===============================================================================
  578. Func _GUICtrlListGetText($h_listbox, $i_index)
  579.    Local $struct = DllStructCreate("char[" & _GUICtrlListGetTextLen($h_listbox, $i_index) + 1 & "]")
  580.    Local $v_ret
  581.    If @error Then Return SetError($LB_ERR, $LB_ERR, $LB_ERR)
  582.    
  583.    If IsHWnd($h_listbox) Then
  584.       $v_ret = DllCall("user32.dll", "int", "SendMessage", "hwnd", $h_listbox, "int", $LB_GETTEXT, "int", $i_index, "ptr", DllStructGetPtr($struct))
  585.    Else
  586.       $v_ret = GUICtrlSendMsg($h_listbox, $LB_GETTEXT, $i_index, DllStructGetPtr($struct))
  587.    EndIf
  588.    $v_ret = DllStructGetData($struct, 1)
  589.    Return $v_ret
  590. EndFunc   ;==>_GUICtrlListGetText
  591.  
  592. ;===============================================================================
  593. ;
  594. ; Description:            _GUICtrlListGetTextLen
  595. ; Parameter(s):        $h_listbox - controlID
  596. ;                            $i_index - Zero-based index of item
  597. ; Requirement:            None
  598. ; Return Value(s):    The return value is the length of the string
  599. ;                            If the wParam parameter does not specify a valid index, the return value is $LB_ERR
  600. ; User CallTip:        _GUICtrlListGetTextLen($h_listbox, $i_index) alternative to StringLen (required: <GuiList.au3>)
  601. ; Author(s):            CyberSlug
  602. ; Note(s):                None
  603. ;
  604. ;===============================================================================
  605. Func _GUICtrlListGetTextLen($h_listbox, $i_index)
  606.    If IsHWnd($h_listbox) Then
  607.       Local $a_ret = DllCall("user32.dll", "int", "SendMessage", "hwnd", $h_listbox, "int", $LB_GETTEXTLEN, "int", $i_index, "int", 0)
  608.       Return $a_ret[0]
  609.    Else
  610.       Return GUICtrlSendMsg($h_listbox, $LB_GETTEXTLEN, $i_index, 0)
  611.    EndIf
  612. EndFunc   ;==>_GUICtrlListGetTextLen
  613.  
  614. ;===============================================================================
  615. ;
  616. ; Description:            _GUICtrlListGetTopIndex
  617. ; Parameter(s):        $h_listbox - controlID
  618. ; Requirement:            None
  619. ; Return Value(s):    The return value is the index of the first visible item in the list box.
  620. ;                            If the list is empty then $LB_ERR is returned.
  621. ; User CallTip:        _GUICtrlListGetTopIndex($h_listbox) retrieve the index of the first visible item in a list (required: <GuiList.au3>)
  622. ; Author(s):            Gary Frost (custompcs at charter dot net)
  623. ;                    CyberSlug
  624. ; Note(s):                Initially the item with index 0 is at the top of the list box, but if
  625. ;                             the list box contents have been scrolled another item may be at the top.
  626. ;                             Returns index of the first visible item in the list box
  627. ;                             useful since contents for a long list will scroll
  628. ;
  629. ;===============================================================================
  630. Func _GUICtrlListGetTopIndex($h_listbox)
  631.    If (Not _GUICtrlListCount($h_listbox)) Then Return SetError($LB_ERR, $LB_ERR, $LB_ERR)
  632.       If IsHWnd($h_listbox) Then
  633.          Local $a_ret = DllCall("user32.dll", "int", "SendMessage", "hwnd", $h_listbox, "int", $LB_GETTOPINDEX, "int", 0, "int", 0)
  634.          Return $a_ret[0]
  635.       Else
  636.          Return GUICtrlSendMsg($h_listbox, $LB_GETTOPINDEX, 0, 0)
  637.       EndIf
  638. EndFunc   ;==>_GUICtrlListGetTopIndex
  639.  
  640. ;===============================================================================
  641. ;
  642. ; Description:            _GUICtrlListInsertItem
  643. ; Parameter(s):        $h_listbox - controlID
  644. ;                            $s_text - String to insert
  645. ;                            $i_index - Optional: index to insert at
  646. ; Requirement:            None
  647. ; Return Value(s):    The return value is the index of the position at which the string was inserted.
  648. ;                            If an error occurs, the return value is $LB_ERR. If there is insufficient space
  649. ;                            to store the new string, the return value is $LB_ERRSPACE.
  650. ; User CallTip:        _GUICtrlListInsertItem($h_listbox, $s_text[, $i_index=-1]) insert a string into the list (required: <GuiList.au3>)
  651. ; Author(s):            Gary Frost (custompcs at charter dot net)
  652. ; Note(s):                If this parameter is û1, the string is added to the end of the list.
  653. ;                             Unlike the _GUICtrlListAddItem, this function does not cause a list
  654. ;                             with the LBS_SORT style to be sorted.
  655. ;
  656. ;===============================================================================
  657. Func _GUICtrlListInsertItem($h_listbox, $s_text, $i_index = -1)
  658.    If IsHWnd($h_listbox) Then
  659.       Local $a_ret = DllCall("user32.dll", "int", "SendMessage", "hwnd", $h_listbox, "int", $LB_INSERTSTRING, "int", $i_index, "str", $s_text)
  660.       Return $a_ret[0]
  661.    Else
  662.       Return GUICtrlSendMsg($h_listbox, $LB_INSERTSTRING, $i_index, $s_text)
  663.    EndIf
  664. EndFunc   ;==>_GUICtrlListInsertItem
  665.  
  666. ;===============================================================================
  667. ;
  668. ; Description:            _GUICtrlListReplaceString
  669. ; Parameter(s):        $h_listbox - controlID
  670. ;                            $i_index - Zero-based index of the item to replace
  671. ;                            $s_newString - String to replace old string
  672. ; Requirement:            None
  673. ; Return Value(s):    If an error occurs, the return value is $LB_ERR
  674. ; User CallTip:        _GUICtrlListReplaceString($h_listbox, $i_index, $s_newString) Replaces the text of an item at index (required: <GuiList.au3>)
  675. ; Author(s):            Gary Frost (custompcs at charter dot net)
  676. ;                    CyberSlug
  677. ; Note(s):                None
  678. ;
  679. ;===============================================================================
  680. Func _GUICtrlListReplaceString($h_listbox, $i_index, $s_newString)
  681.    If (_GUICtrlListDeleteItem($h_listbox, $i_index) == $LB_ERR) Then Return SetError($LB_ERR, $LB_ERR, $LB_ERR)
  682.    If (_GUICtrlListInsertItem($h_listbox, $s_newString, $i_index) == $LB_ERR) Then Return SetError($LB_ERR, $LB_ERR, $LB_ERR)
  683. EndFunc   ;==>_GUICtrlListReplaceString
  684.  
  685. ;===============================================================================
  686. ;
  687. ; Description:            _GUICtrlListSelectIndex
  688. ; Parameter(s):        $h_listbox - controlID
  689. ;                            $i_index - Specifies the zero-based index of the list box item
  690. ; Requirement:            
  691. ; Return Value(s):    If an error occurs, the return value is $LB_ERR. 
  692. ;                            If the $i_index parameter is û1, the return value is $LB_ERR even though no error occurred. 
  693. ; User CallTip:        _GUICtrlListSelectIndex($h_listbox, $i_index) Select a string and scroll it into view, if necessary (required: <GuiList.au3>)
  694. ; Author(s):            Sokko, Documented and Added To UDFs (Gary Frost (custompcs at charter dot net))
  695. ; Note(s):                Use this message only with single-selection list boxes.
  696. ;                            You cannot use it to set or remove a selection in a multiple-selection list box. 
  697. ;
  698. ;===============================================================================
  699. Func _GUICtrlListSelectIndex($h_listbox, $i_index)
  700.     If IsHWnd($h_listbox) Then
  701.         Local $a_ret = DllCall("user32.dll", "int", "SendMessage", "hwnd", $h_listbox, "int", $LB_SETCURSEL, "int", $i_index, "int", 0)
  702.         Return $a_ret[0]
  703.     Else
  704.         Return GUICtrlSendMsg($h_listbox, $LB_SETCURSEL, $i_index, 0)
  705.     EndIf
  706. EndFunc ;==>_GUICtrlListSelectIndex
  707.  
  708. ;===============================================================================
  709. ;
  710. ; Description:            _GUICtrlListSelectedIndex
  711. ; Parameter(s):        $h_listbox - controlID
  712. ; Requirement:            None
  713. ; Return Value(s):    In a single-selection list box, the return value is the zero-based
  714. ;                            index of the currently selected item. If there is no selection,
  715. ;                            the return value is $LB_ERR
  716. ; User CallTip:        _GUICtrlListSelectedIndex($h_listbox) return the index of selected item (required: <GuiList.au3>)
  717. ; Author(s):            Gary Frost (custompcs at charter dot net)
  718. ; Note(s):                Do not use this with a multiple-selection list box.
  719. ;
  720. ;===============================================================================
  721. Func _GUICtrlListSelectedIndex($h_listbox)
  722.    If IsHWnd($h_listbox) Then
  723.       Local $a_ret = DllCall("user32.dll", "int", "SendMessage", "hwnd", $h_listbox, "int", $LB_GETCURSEL, "int", 0, "int", 0)
  724.       Return $a_ret[0]
  725.    Else
  726.       Return GUICtrlSendMsg($h_listbox, $LB_GETCURSEL, 0, 0)
  727.    EndIf
  728. EndFunc   ;==>_GUICtrlListSelectedIndex
  729.  
  730. ;===============================================================================
  731. ;
  732. ; Description:            _GUICtrlListSelectString
  733. ; Parameter(s):        $h_listbox - controlID
  734. ;                            $s_text - String to select
  735. ;                            $i_index - Optional: Zero-based index of the item before the first item to be searched
  736. ; Requirement:            None
  737. ; Return Value(s):    If the search is successful, the return value is the index of the selected item.
  738. ;                            If the search is unsuccessful, the return value is $LB_ERR and the current selection is not changed.
  739. ; User CallTip:        _GUICtrlListSelectString($h_listbox, $s_text[, $i_index=-1]) select item using search string (required: <GuiList.au3>)
  740. ; Author(s):            Gary Frost (custompcs at charter dot net)
  741. ; Note(s):                If $i_index is û1, the entire list box is searched from the beginning
  742. ;
  743. ;===============================================================================
  744. Func _GUICtrlListSelectString($h_listbox, $s_search, $i_index = -1)
  745.    If IsHWnd($h_listbox) Then
  746.       Local $a_ret = DllCall("user32.dll", "int", "SendMessage", "hwnd", $h_listbox, "int", $LB_SELECTSTRING, "int", $i_index, "str", $s_search)
  747.       Return $a_ret[0]
  748.    Else
  749.       Return GUICtrlSendMsg($h_listbox, $LB_SELECTSTRING, $i_index, $s_search)
  750.    EndIf
  751. EndFunc   ;==>_GUICtrlListSelectString
  752.  
  753. ;===============================================================================
  754. ;
  755. ; Description:            _GUICtrlListSelItemRange
  756. ; Parameter(s):        $h_listbox - controlID
  757. ;                            $i_flag - Set/Remove select
  758. ;                            $i_start - Zero-based index of the first item to select
  759. ;                            $i_stop - Zero-based index of the last item to select
  760. ; Requirement:            multi-select style
  761. ; Return Value(s):    If an error occurs, the return value is $LB_ERR
  762. ; User CallTip:        _GUICtrlListSelItemRange($h_listbox, $i_flag, $i_start, $i_stop) Select range by index in a multiple-selection list box (required: <GuiList.au3>)
  763. ; Author(s):            Gary Frost (custompcs at charter dot net)
  764. ;                    CyberSlug
  765. ; Note(s):                DOES NOT WORK WITH SINGLE-SELECTION LIST BOXES
  766. ;                             Select items from $i_start to $stop indices (inclusive)
  767. ;                            Can select a range only within the first 65,536 items
  768. ;                             $i_flag == 1 selects
  769. ;                             $i_flag == 0 removes select
  770. ;
  771. ;===============================================================================
  772. Func _GUICtrlListSelItemRange($h_listbox, $i_flag, $i_start, $i_stop)
  773.    If IsHWnd($h_listbox) Then
  774.       Local $a_ret = DllCall("user32.dll", "int", "SendMessage", "hwnd", $h_listbox, "int", $LB_SELITEMRANGE, "int", $i_flag, "int", $i_stop * 65536 + $i_start)
  775.       Return $a_ret[0]
  776.    Else
  777.       Return GUICtrlSendMsg($h_listbox, $LB_SELITEMRANGE, $i_flag, $i_stop * 65536 + $i_start)
  778.    EndIf
  779. EndFunc   ;==>_GUICtrlListSelItemRange
  780.  
  781. ;===============================================================================
  782. ;
  783. ; Description:            _GUICtrlListSelItemRangeEx
  784. ; Parameter(s):        $h_listbox - controlID
  785. ;                            $i_start - Zero-based index of the first item to select
  786. ;                            $i_stop - Zero-based index of the last item to select
  787. ; Requirement:            multi-select style
  788. ; Return Value(s):    If an error occurs, the return value is $LB_ERR
  789. ; User CallTip:        _GUICtrlListSelItemRangeEx($h_listbox, $i_start, $i_stop) Selects items from $i_start to $i_stop (required: <GuiList.au3>)
  790. ; Author(s):            CyberSlug
  791. ; Note(s):                DOES NOT WORK WITH SINGLE-SELECTION LIST BOXES
  792. ;                          If $i_start > $i_stop Then items are un-selected
  793. ;
  794. ;===============================================================================
  795. Func _GUICtrlListSelItemRangeEx($h_listbox, $i_start, $i_stop)
  796.    If IsHWnd($h_listbox) Then
  797.       Local $a_ret = DllCall("user32.dll", "int", "SendMessage", "hwnd", $h_listbox, "int", $LB_SELITEMRANGEEX, "int", $i_start, "int", $i_stop)
  798.       Return $a_ret[0]
  799.    Else
  800.       Return GUICtrlSendMsg($h_listbox, $LB_SELITEMRANGEEX, $i_start, $i_stop)
  801.    EndIf
  802. EndFunc   ;==>_GUICtrlListSelItemRangeEx
  803.  
  804. ;===============================================================================
  805. ;
  806. ; Description:            _GUICtrlListSetAnchorIndex
  807. ; Parameter(s):        $h_listbox - controlID
  808. ;                            $i_index - Specifies the index of the new anchor item.
  809. ; Requirement:            multi-select style
  810. ; Return Value(s):    If the message succeeds, the return value is zero.
  811. ;                            If the message fails, the return value is $LB_ERR.
  812. ; User CallTip:        _GUICtrlListSetAnchorIndex($h_listbox, $i_index) Set the Anchor Idex (required: <GuiList.au3>)
  813. ; Author(s):            Gary Frost (custompcs at charter dot net)
  814. ; Note(s):                DOES NOT WORK WITH SINGLE-SELECTION LIST BOXES
  815. ;
  816. ;===============================================================================
  817. Func _GUICtrlListSetAnchorIndex($h_listbox, $i_index)
  818.    If IsHWnd($h_listbox) Then
  819.       Local $a_ret = DllCall("user32.dll", "int", "SendMessage", "hwnd", $h_listbox, "int", $LB_SETANCHORINDEX, "int", $i_index, "int", 0)
  820.       Return $a_ret[0]
  821.    Else
  822.       Return GUICtrlSendMsg($h_listbox, $LB_SETANCHORINDEX, $i_index, 0)
  823.    EndIf
  824. EndFunc   ;==>_GUICtrlListSetAnchorIndex
  825.  
  826. ;===============================================================================
  827. ;
  828. ; Description:            _GUICtrlListGetCaretIndex
  829. ; Parameter(s):        $h_listbox - controlID
  830. ;                            $i_index - Specifies the zero-based index of the list box item that is to receive the focus rectangle.
  831. ;                            $i_bool - Optional: If this value is FALSE, the item is scrolled until it is fully visible; if it is TRUE, the item is scrolled until it is at least partially visible.
  832. ; Requirement:            multi-select style
  833. ; Return Value(s):    The return value is the zero-based index of the selected list box item.
  834. ;                            If nothing is selected $LB_ERR can be returned.
  835. ; User CallTip:        _GUICtrlListSetCaretIndex($h_listbox, $i_index[, $i_bool=1]) Set the focus rectangle to the item at the specified index (required: <GuiList.au3>)
  836. ; Author(s):            Gary Frost (custompcs at charter dot net)
  837. ; Note(s):                DOES NOT WORK WITH SINGLE-SELECTION LIST BOXES
  838. ;
  839. ;===============================================================================
  840. Func _GUICtrlListSetCaretIndex($h_listbox, $i_index, $i_bool = 1)
  841.    If IsHWnd($h_listbox) Then
  842.       Local $a_ret = DllCall("user32.dll", "int", "SendMessage", "hwnd", $h_listbox, "int", $LB_SETCARETINDEX, "int", $i_index, "int", $i_bool)
  843.       Return $a_ret[0]
  844.    Else
  845.       Return GUICtrlSendMsg($h_listbox, $LB_SETCARETINDEX, $i_index, $i_bool)
  846.    EndIf
  847. EndFunc   ;==>_GUICtrlListSetCaretIndex
  848.  
  849. ;===============================================================================
  850. ;
  851. ; Description:            _GUICtrlListSetHorizontalExtent
  852. ; Parameter(s):        $h_listbox - controlID
  853. ;                            $i_pixels - Specifies the number of pixels by which the list box can be scrolled.
  854. ; Requirement:            None.
  855. ; Return Value(s):    None.
  856. ; User CallTip:        _GUICtrlListSetHorizontalExtent($h_listbox, $i_num) Set the width, in pixels, by which a list box can be scrolled horizontally (required: <GuiList.au3>)
  857. ; Author(s):            Gary Frost (custompcs at charter dot net)
  858. ; Note(s):                To respond to the $LB_SETHORIZONTALEXTENT message,
  859. ;                            the list box must have been defined with the $WS_HSCROLL style.
  860. ;
  861. ;===============================================================================
  862. Func _GUICtrlListSetHorizontalExtent($h_listbox, $i_pixels)
  863.    If IsHWnd($h_listbox) Then
  864.       DllCall("user32.dll", "none", "SendMessage", "hwnd", $h_listbox, "int", $LB_SETHORIZONTALEXTENT, "int", $i_pixels, "int", 0)
  865.    Else
  866.       GUICtrlSendMsg($h_listbox, $LB_SETHORIZONTALEXTENT, $i_pixels, 0)
  867.    EndIf
  868. EndFunc   ;==>_GUICtrlListSetHorizontalExtent
  869.  
  870. ;===============================================================================
  871. ;
  872. ; Description:            _GUICtrlListSetLocale
  873. ; Parameter(s):        $h_listbox - controlID
  874. ;                            $s_locale - locale
  875. ; Requirement:            None
  876. ; Return Value(s):    Returns previous locale or $LB_ERR
  877. ; User CallTip:        _GUICtrlListSetLocale($h_listbox, $s_locale) Set the locale (required: <GuiList.au3>)
  878. ; Author(s):            CyberSlug
  879. ; Note(s):                "0409" for U.S. English
  880. ;                            see @OSLang for string values
  881. ;
  882. ;===============================================================================
  883. Func _GUICtrlListSetLocale($h_listbox, $s_locale)
  884.    If IsHWnd($h_listbox) Then
  885.       Local $a_ret = DllCall("user32.dll", "int", "SendMessage", "hwnd", $h_listbox, "int", $LB_SETLOCALE, "int", Dec($s_locale), "int", 0)
  886.       Return Hex($a_ret[0], 4)
  887.    Else
  888.       Return Hex( GUICtrlSendMsg($h_listbox, $LB_SETLOCALE, Dec($s_locale), 0), 4)
  889.    EndIf
  890. EndFunc   ;==>_GUICtrlListSetLocale
  891.  
  892. ;===============================================================================
  893. ;
  894. ; Description:            _GUICtrlListSetSel
  895. ; Parameter(s):        $h_listbox - controlID
  896. ;                            $i_flag - Optional: Select/UnSelect
  897. ;                            $i_index - Optional: Specifies the zero-based index of the item
  898. ; Requirement:            multi-select style
  899. ; Return Value(s):    If an error occurs, the return value is $LB_ERR
  900. ; User CallTip:        _GUICtrlListSetSel($h_listbox [, $i_flag] , $i_index]]) Select string(s) in a multiple-selection list box (required: <GuiList.au3>)
  901. ; Author(s):            Gary Frost (custompcs at charter dot net)
  902. ;                    CyberSlug
  903. ; Note(s):                DOES NOT WORK WITH SINGLE-SELECTION LIST BOXES
  904. ;                             $i_flag == 0 means unselect
  905. ;                             $i_flag == 1 means select
  906. ;                            $i_flag == -1 means toggle select/unselect of item
  907. ;                             An $i_index of -1 means to toggle select/unselect of all items (ignores the $i_flag).
  908. ;
  909. ;===============================================================================
  910. Func _GUICtrlListSetSel($h_listbox, $i_flag = -1, $i_index = -1)
  911.    If IsHWnd($h_listbox) Then
  912.       Local $v_ret
  913.       If $i_index == -1 Then ; toggle all
  914.          For $i_index = 0 To _GUICtrlListCount($h_listbox) - 1
  915.             $v_ret = _GUICtrlListGetSelState($h_listbox, $i_index)
  916.             If ($v_ret == $LB_ERR) Then Return SetError($LB_ERR, $LB_ERR, $LB_ERR)
  917.             If ($v_ret > 0) Then ;If Selected Then
  918.                $v_ret = DllCall("user32.dll", "int", "SendMessage", "hwnd", $h_listbox, "int", $LB_SETSEL, "int", 0, "int", $i_index)
  919.             Else
  920.                $v_ret = DllCall("user32.dll", "int", "SendMessage", "hwnd", $h_listbox, "int", $LB_SETSEL, "int", 1, "int", $i_index)
  921.             EndIf
  922.             If ($v_ret[0] == $LB_ERR) Then Return SetError($LB_ERR, $LB_ERR, $LB_ERR)
  923.          Next
  924.       ElseIf $i_flag == -1 Then ; toggle state of index
  925.          If _GUICtrlListGetSelState($h_listbox, $i_index) Then ;If Selected Then
  926.             $v_ret = DllCall("user32.dll", "int", "SendMessage", "hwnd", $h_listbox, "int", $LB_SETSEL, "int", 0, "int", $i_index)
  927.          Else
  928.             $v_ret = DllCall("user32.dll", "int", "SendMessage", "hwnd", $h_listbox, "int", $LB_SETSEL, "int", 1, "int", $i_index)
  929.          EndIf
  930.          Return $v_ret[0]
  931.       Else
  932.          $v_ret = DllCall("user32.dll", "int", "SendMessage", "hwnd", $h_listbox, "int", $LB_SETSEL, "int", $i_flag, "int", $i_index)
  933.          Return $v_ret[0]
  934.       EndIf
  935.    Else
  936.       Local $i_ret
  937.       If $i_index == -1 Then ; toggle all
  938.          For $i_index = 0 To _GUICtrlListCount($h_listbox) - 1
  939.             $i_ret = _GUICtrlListGetSelState($h_listbox, $i_index)
  940.             If ($i_ret == $LB_ERR) Then Return SetError($LB_ERR, $LB_ERR, $LB_ERR)
  941.             If ($i_ret > 0) Then ;If Selected Then
  942.                $i_ret = GUICtrlSendMsg($h_listbox, $LB_SETSEL, 0, $i_index)
  943.             Else
  944.                $i_ret = GUICtrlSendMsg($h_listbox, $LB_SETSEL, 1, $i_index)
  945.             EndIf
  946.             If ($i_ret == $LB_ERR) Then Return SetError($LB_ERR, $LB_ERR, $LB_ERR)
  947.          Next
  948.       ElseIf $i_flag == -1 Then ; toggle state of index
  949.          If _GUICtrlListGetSelState($h_listbox, $i_index) Then ;If Selected Then
  950.             Return GUICtrlSendMsg($h_listbox, $LB_SETSEL, 0, $i_index)
  951.          Else
  952.             Return GUICtrlSendMsg($h_listbox, $LB_SETSEL, 1, $i_index)
  953.          EndIf
  954.       Else
  955.          Return GUICtrlSendMsg($h_listbox, $LB_SETSEL, $i_flag, $i_index)
  956.       EndIf
  957.    EndIf
  958. EndFunc   ;==>_GUICtrlListSetSel
  959.  
  960. ;===============================================================================
  961. ;
  962. ; Description:            _GUICtrlListSetTopIndex
  963. ; Parameter(s):        $h_listbox - controlID
  964. ;                            $i_index - Specifies the zero-based index of the item
  965. ; Requirement:            None
  966. ; Return Value(s):    If an error occurs, the return value is $LB_ERR
  967. ; User CallTip:        _GUICtrlListSetTopIndex($h_listbox, $i_index) ensure that a particular item in a list box is visible (required: <GuiList.au3>)
  968. ; Author(s):            CyberSlug
  969. ; Note(s):                None
  970. ;
  971. ;===============================================================================
  972. Func _GUICtrlListSetTopIndex($h_listbox, $i_index)
  973.    If IsHWnd($h_listbox) Then
  974.       Local $a_ret = DllCall("user32.dll", "int", "SendMessage", "hwnd", $h_listbox, "int", $LB_SETTOPINDEX, "int", $i_index, "int", 0)
  975.       Return $a_ret[0]
  976.    Else
  977.       Return GUICtrlSendMsg($h_listbox, $LB_SETTOPINDEX, $i_index, 0)
  978.    EndIf
  979. EndFunc   ;==>_GUICtrlListSetTopIndex
  980.  
  981. ;===============================================================================
  982. ;
  983. ; Description:            _GUICtrlListSort
  984. ; Parameter(s):        $h_listbox - controlID
  985. ; Requirement:            None
  986. ; Return Value(s):    If an error occurs, the return value is $LB_ERR
  987. ; User CallTip:        _GUICtrlListSort($h_listbox) Re-sorts list box if it has the LBS_SORT style (required: <GuiList.au3>)
  988. ; Author(s):            Gary Frost (custompcs at charter dot net)
  989. ;                    CyberSlug
  990. ; Note(s):                Re-sorts list box if it has the LBS_SORT style
  991. ;                          Might be useful if you use InsertString
  992. ;
  993. ;===============================================================================
  994. Func _GUICtrlListSort($h_listbox)
  995.    Local $bak = _GUICtrlListGetText($h_listbox, 0)
  996.    If ($bak == $LB_ERR) Then Return SetError($LB_ERR, $LB_ERR, $LB_ERR)
  997.    If (_GUICtrlListDeleteItem($h_listbox, 0) == $LB_ERR) Then Return SetError($LB_ERR, $LB_ERR, $LB_ERR)
  998.    Return _GUICtrlListAddItem($h_listbox, $bak)
  999. EndFunc   ;==>_GUICtrlListSort
  1000.  
  1001. ;===============================================================================
  1002. ;
  1003. ; Description:            _GUICtrlListSwapString
  1004. ; Parameter(s):        $h_listbox - controlID
  1005. ;                            $i_indexA - Zero-based index item to swap
  1006. ;                            $i_indexB - Zero-based index item to swap
  1007. ; Requirement:            None
  1008. ; Return Value(s):    If an error occurs, the return value is $LB_ERR
  1009. ; User CallTip:        _GUICtrlListSwapString($h_listbox, $i_indexA, $i_indexB) Swaps the text of two items at the specified indices (required: <GuiList.au3>)
  1010. ; Author(s):            Gary Frost (custompcs at charter dot net)
  1011. ;                    CyberSlug
  1012. ; Note(s):                None
  1013. ;
  1014. ;===============================================================================
  1015. Func _GUICtrlListSwapString($h_listbox, $i_indexA, $i_indexB)
  1016.    Local $itemA = _GUICtrlListGetText($h_listbox, $i_indexA)
  1017.    Local $itemB = _GUICtrlListGetText($h_listbox, $i_indexB)
  1018.    If ($itemA == $LB_ERR Or $itemB == $LB_ERR) Then Return SetError($LB_ERR, $LB_ERR, $LB_ERR)
  1019.    If (_GUICtrlListDeleteItem($h_listbox, $i_indexA) == $LB_ERR) Then Return SetError($LB_ERR, $LB_ERR, $LB_ERR)
  1020.    If (_GUICtrlListInsertItem($h_listbox, $itemB, $i_indexA) == $LB_ERR) Then Return SetError($LB_ERR, $LB_ERR, $LB_ERR)
  1021.    
  1022.    If (_GUICtrlListDeleteItem($h_listbox, $i_indexB) == $LB_ERR) Then Return SetError($LB_ERR, $LB_ERR, $LB_ERR)
  1023.    If (_GUICtrlListInsertItem($h_listbox, $itemA, $i_indexB) == $LB_ERR) Then Return SetError($LB_ERR, $LB_ERR, $LB_ERR)
  1024. EndFunc   ;==>_GUICtrlListSwapString
  1025.